<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
  
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  
  <link rel="stylesheet" href="../rurple.css" type="text/css">
  <title>Éviter les répétitions, encore une fois !</title>

  
</head><body>
<h2 class="title">11. Éviter les répétitions, encore une fois !</h2>

<p>La règle N°3 que nous avons vue dans la leçon précédente est si
importante que je sens que je dois la répéter pour vous aider à bien
vous en rappeler.</p>

<dl>

  <dt><b>Règle N°3</b></dt>
  <dd>Quand vous écrivez des programmes, ne vous répétez pas.<br>
Je répète : <b>Ne vous répétez pas !</b></dd>
</dl>

<!--================================================-->
<hr width="50%"><a name="Repeat" id="Repeat"></a>
<h3 class="section">Répétez !</h3>

<p>Dans votre dernière solution à l'exercice de livraison du journal,
il y avait peut-être encore pas mal de répétitions. Par exemple, la
commande
<tt>turn_left()</tt> a dû apparaître trois fois de suite dans la
définition
de <tt>turn_right()</tt>. De la même manière, <tt>monter_une_marche()</tt>
a dû apparaître quatre fois dans la définition de <tt>monter_quatre_marches()</tt>.
Ceci semble aller à l'encontre de notre règle qui dicte de ne pas se
répéter. Un moyen d'éviter ce genre de répétitions est de demander à
Reeborg de répéter des instructions
grâce à une commande spéciale.</p>

<p>Pour que Reeborg répète une instruction, nous utilisons la commande
<tt>repeat()</tt> comme suit :<br>
<tt>repeat(<em>nom de l'instruction</em>, <em>nombre de fois</em>)</tt></p>

<p>Remarquez que le <em>nom de l'instruction</em> est le nom sans les
parenthèses () à la fin. Par exemple, nous pouvons écrire :<br>
</p>

<pre><span class="keyword">def</span> turn_right():<br>    repeat(turn_left, 3)<br></pre>

<h3 class="try">À votre tour<br>
</h3>

<p>Utilisez <tt>repeat()</tt> partout où vous pouvez pour écrire une
version plus courte de l'exercice de livraison du journal. Vérifiez
bien que votre nouveau programme fonctionne comme attendu.<br>
</p>

<!--============================================-->
<hr width="50%"><a name="Challenges2" id="Challenges2"></a>
<h3 class="suggested">Exercices</h3>

<p>Nous terminons cette leçon avec quelques exercices. Respectant le
sujet de cette leçon (mais pas le titre !), les deux premiers exercices
sont des répétitions de deux exercices de la fin de la leçon sur la
construction des murs. Pour les résoudre, vous devez utiliser les
nouveaux concepts [<span class="pykeyword">def</span>, <tt>repeat()</tt>]
que vous avez vus dans cette leçon et celle d'avant.</p>

<h3 class="suggested">Saut de haies</h3>

<p>Reeborg participe à une course de haies. Écrivez un nouveau
programme qui lui fait suivre le chemin indiqué ci-dessous pour
atteindre la ligne d'arrivée. Le fichier monde est hurdles1.wld.</p>

<center><img alt="haies - départ" src="../../images/intro/hurdles1_start.png"></center>

<center><img alt="donne" src="../../images/lead_to.png"> <img alt="haies - arrivée" src="../../images/intro/hurdles1_end.png"></center>

<p>Il peut être utile de définir, entre autres une nouvelle
instruction,
<tt>sauter_haie()</tt>, qui correspondrait au chemin suivant :</p>

<center><img alt="sauter une haie début" src="../../images/intro/jump1start.png"> <img alt="donne" src="../../images/lead_to.png"> <img alt="sauter une haie fin" src="../../images/intro/jump1end.png"></center>

<p>Comparez votre nouvelle solution avec celle d'avant [Vous l'avez
bien enregistrée, n'est-ce pas ?]</p>

<hr width="50%">
<h3 class="suggested">Le temps des récoltes<br>
</h3>

<p>C'est le temps des récoltes ! Faites cueillir à Reeborg toutes les
carottes (représentées
par&nbsp;
les sonnettes) dans ce jardin. Le fichier monde est harvest1.wld.</p>

<p><img src="../../images/intro/harvest1.png" alt="récolte départ"></p>

<p>Votre programme devrait définir les instructions suivantes :</p>

<pre>aller_a_premiere_rangee()<br>recolter_deux_rangees()<br>aller_a_droite_vers_prochaine_rangee()<br></pre>

<p>Vous pouvez vouloir découper un peu plus ces instructions. Par
exemple, vous <b><i>pourriez</i></b> avoir:</p>

<pre><span class="keyword">def</span> recolter_deux_rangees():<br>    recolter_une_rangee()<br>    aller_a_gauche_vers_prochaine_rangee()<br>    recolter_une_rangee()<br></pre>

<p>avec une définition appropriée pour <code>recolter_une_rangee()</code>.
Cependant, vous pourriez aussi choisir votre manière de découper les
instructions nécessaires. Avec les trois instructions nécessaires
définies, ma version du programme, sans les définitions, est écrite
(avec toujours quelques répétitions) comme ceci :</p>

<pre>aller_a_premiere_rangee()<br>recolter_deux_rangees()<br>aller_a_droite_vers_prochaine_rangee()<br>recolter_deux_rangees()<br>
aller_a_droite_vers_prochaine_rangee()<br>recolter_deux_rangees()<br>turn_off()<br></pre>

<p>Encore une fois, comparez votre nouvelle solution avec celle que
vous aviez avant pour le problème de la récolte.</p>

<h3 class="suggested">Encore le temps des récoltes !</h3>

<p>C'est encore le temps des récoltes ! Mais cette fois, les rangées
dans le jardin ont été plantées en diagonales. Faites cueillir à
Reeborg toutes les carottes (représentées par des sonnettes) dans le
jardin (voir ci-dessous). Le fichier monde est harvest4.wld.</p>

<p><img src="../../images/intro/harvest2.png" alt="récolte départ"></p>

<p>Comme dans l'exemple précédent, votre programme pourrait définir les
instructions suivantes :</p>

<pre>aller_a_premiere_rangee()<br>recolter_deux_rangees()<br>aller_a_droite_vers_prochaine_rangee()<br></pre>

<p>Ces instructions <b><u>ne</u></b>  seront <b><u>pas</u></b> définies
de la même façon qu'avant. Mais une fois que vous avez défini ces
instructions, votre programme devrait être écrit de la même façon que
l'exemple précédent :</p>

<pre>aller_a_premiere_rangee()<br>recolter_deux_rangees()<br>aller_a_droite_vers_prochaine_rangee()<br>
recolter_deux_rangees()<br>aller_a_droite_vers_prochaine_rangee()<br>recolter_deux_rangees()<br>turn_off()<br></pre>

<p>Attention à ne pas rentrer dans un mur ! Pensez à l'endroit où vous
voulez commencer la récolte, et dans quelle direction vous allez
récolter. Vous pouvez tracer un chemin sur une feuille de papier pour
vous aider.</p>

<center><a href="10-def.htm"><img alt="precedent" src="../../images/previous.png"> Éviter absolument les répétitions</a> -
<a href="../lessons_toc.htm"><img alt="début" src="../../images/home.png"></a>-
<a href="12-if.htm">Si seulement Reeborg pouvait décider tout seul... <img alt="suivant" src="../../images/next.png"></a></center>

</body></html>